[HVM] Change VCPU->LAPIC_ID mapping so that VCPU0 has ID0.
authorkaf24@localhost.localdomain <kaf24@localhost.localdomain>
Sun, 31 Dec 2006 12:26:42 +0000 (12:26 +0000)
committerkaf24@localhost.localdomain <kaf24@localhost.localdomain>
Sun, 31 Dec 2006 12:26:42 +0000 (12:26 +0000)
This fixes booting of older x86/64 Linux kernels.
Signed-off-by: Keir Fraser <keir@xensource.com>
tools/firmware/hvmloader/acpi/build.c
tools/firmware/hvmloader/config.h
tools/firmware/hvmloader/mp_tables.c
xen/arch/x86/hvm/vlapic.c

index 32d269d2131356520c43d4b6dbaa4239b3d4988f..3890bc3166fd3f0d5fc0e54857f31d48067e77b7 100644 (file)
@@ -110,7 +110,7 @@ int construct_madt(struct acpi_20_madt *madt)
         memset(lapic, 0, sizeof(*lapic));
         lapic->type    = ACPI_PROCESSOR_LOCAL_APIC;
         lapic->length  = sizeof(*lapic);
-        lapic->acpi_processor_id = lapic->apic_id = i + 1;
+        lapic->acpi_processor_id = lapic->apic_id = LAPIC_ID(i);
         lapic->flags   = ACPI_LOCAL_APIC_ENABLED;
         offset += sizeof(*lapic);
         lapic++;
index 18d906c4eb7bb535a3740fb23cdddd4c59e358de..2b21c745399c34b7ff1e5ebf96fa16539d63eac9 100644 (file)
@@ -2,10 +2,11 @@
 #define __HVMLOADER_CONFIG_H__
 
 #define IOAPIC_BASE_ADDRESS 0xfec00000
-#define IOAPIC_ID           0x00
+#define IOAPIC_ID           0x01
 #define IOAPIC_VERSION      0x11
 
 #define LAPIC_BASE_ADDRESS  0xfee00000
+#define LAPIC_ID(vcpu_id)   ((vcpu_id) * 2)
 
 #define PCI_ISA_DEVFN       0x08    /* dev 1, fn 0 */
 #define PCI_ISA_IRQ_MASK    0x0c60U /* ISA IRQs 5,6,10,11 are PCI connected */
index 3286e2b24def9f32bb8d0740e3e05ad11ca31181..3b0edb3c9bfe73a2062863a9fe283ec11e19d71b 100644 (file)
@@ -222,7 +222,7 @@ void fill_mp_config_table(struct mp_config_table *mpct, int length)
 void fill_mp_proc_entry(struct mp_proc_entry *mppe, int vcpu_id)
 {
     mppe->type = ENTRY_TYPE_PROCESSOR;
-    mppe->lapic_id = vcpu_id + 1;
+    mppe->lapic_id = LAPIC_ID(vcpu_id);
     mppe->lapic_version = 0x11;
     mppe->cpu_flags = CPU_FLAG_ENABLED;
     if ( vcpu_id == 0 )
index 2280d946bb94718e908b26badccc5c0d3182a352..b1b42650f42c0b29654d8f456103c71398ab4d4f 100644 (file)
@@ -767,7 +767,7 @@ static int vlapic_reset(struct vlapic *vlapic)
     struct vcpu *v = vlapic_vcpu(vlapic);
     int i;
 
-    vlapic_set_reg(vlapic, APIC_ID,  (v->vcpu_id + 1) << 24);
+    vlapic_set_reg(vlapic, APIC_ID,  (v->vcpu_id * 2) << 24);
     vlapic_set_reg(vlapic, APIC_LVR, VLAPIC_VERSION);
 
     for ( i = 0; i < 8; i++ )